package mail

import (
	"sync"

	"github.com/runningwater/gohub/pkg/config"
)

// To 收件人邮箱列表
type To []string

// From 发件人信息
type From struct {
	Address string // 邮箱地址
	Name    string // 发件人名称（可选）
}

// Email 邮件内容结构
type Email struct {
	From        From     // 发件人
	To          To       // 主送人
	Bcc         To       // 密送人
	Cc          To       // 抄送人
	Subject     string   // 邮件主题
	Text        []byte   // 纯文本正文
	HTML        []byte   // HTML格式正文
	Attachments []string // 附件路径列表
}

// Mailer 邮件发送器
type Mailer struct {
	Driver Driver // 邮件驱动实现（SMTP/Mailgun等）
}

var once sync.Once
var mailer *Mailer

// NewMailer 创建邮件发送器单例
func NewMailer() *Mailer {
	once.Do(func() {
		mailer = &Mailer{
			Driver: &SMTP{}, // 默认使用 SMTP 驱动
		}
	})
	return mailer
}

// Send 使用配置的驱动发送邮件
// 返回值 bool 表示是否发送成功
func (m *Mailer) Send(email Email) bool {
	return m.Driver.Send(email, config.GetStringMapString("mail.smtp"))
}
